UnityのMenuItemに罫線をつける、15分くらいの残念な歴史 ~完結編~
概要
自作プラグインのメニュー書いてました。
で、内容も纏め終わってて、出来る事も判ってきたので、えっと、
罫線<hr>これを、項目と項目の間に表示したかったわけです。
完成品
出来上がったものがこちらになります。
このへんを参考にしたんです
http://docs.unity3d.com/Documentation/ScriptReference/MenuItem.MenuItem.html
大丈夫! 公式のサイトだよ!
B.C. 10分 可/不可、誕生
で、こんなコードを書いてました。
[MenuItem ("SublimeSocket/connect")]
static void Connect () {
}
[MenuItem ("SublimeSocket/connect", true)]
static bool IsConnectable () {
return false;
}
[MenuItem ("SublimeSocket/close")]
static void Close () {
}
[MenuItem ("SublimeSocket/close", true)]
static bool IsClosable () {
return false;
}
これで、
connect と close の2つの項目が、disabled状態で表示されるはずです。
こんなふうに。
B.C. 0分 過ちのはじまり
まず、この修飾メソッドの使い方がアレだった。
[MenuItem ("SublimeSocket/connect")]
で、SublimeSocket 項目をメニューに表示、
クリックするとconnectとcloseが表示されますよ、と。
直下のメソッドは、connectとかが押されたときにfireされる。
で、じゃあすぐ下のペアはなんなの?っていうと、
パス部分の名前が一致する、すぐ上の修飾されたメソッド に対して、eneable/disableを設定する関数+修飾
なるほど。
違いは第二引数、true の存在。
[MenuItem ("SublimeSocket/connect", true)]
この値と一致する値を直下のメソッドが返す場合、その項目はenable
逆ならdisable
そういう仕様。
なるほど。へんなの。。。
A.C. 5分 そして罫線へ、、
で、とりあえず作ったわけですが、
けいせんほしい。
けいせんほしい。
priorityというパラメータがあるんだぜ、ってことで、まず調べる。
Separator in custom Editor MenuItem
http://answers.unity3d.com/questions/51906/separator-in-custom-editor-menuitem.html
ほう。
で、
こうしてみた。
[MenuItem ("SublimeSocket/connect")]
static void Connect () {
}
[MenuItem ("SublimeSocket/connect", true, 10)]
static bool IsConnectable () {
return false;
}
[MenuItem ("SublimeSocket/close")]
static void Close () {
}
[MenuItem ("SublimeSocket/close", true, 20)]
static bool IsClosable () {
return false;
}
しーん、、、、
え。線が入らない。 値を変えても変わらない。 そんなアホな、、
priority値をどんなに変えてもだめ。
いえね、罫線入れるとかはオプション側かなって思い込んじゃった。
過ちの始まりだった。
A.C. 10分 サルの惑星 ショート・ショート
じごくの はじまりだ!!
1stバッター・ハイフン
うんうん、なんか切り取れそう。
2ndバッター・アンダースコア
ここで判明する、「同じ文字列で同じ長さ=同じ項目なので対消滅する」という
至極真っ当なルールが追い打ちをかける。
つまり長さが違う。 いやだ。。。。。
別の文字で同じ長さ、、そうだ!!
3rdバッター・オーバーライン
これだ! →‾‾‾‾‾‾‾‾‾‾‾‾‾← t‾wadaさんみたいな救世主だ!!
もうね、腹抱えて笑った。
アホかと。さすが俺、アホかと。
A.C. 15分 ジャッジメント・デイ
ここで、4番が仕事をします。
[井上さん、できましたよ]
俺「え。」
コードがこちら。
[MenuItem ("SublimeSocket/connect", false, 10)]
static void Connect () {
}
[MenuItem ("SublimeSocket/connect", true)]
static bool IsConnectable () {
return false;
}
[MenuItem ("SublimeSocket/close", false, 30)]
static void Close () {
}
[MenuItem ("SublimeSocket/close", true)]
static bool IsClosable () {
return false;
}
え。
オプションじゃないほうに入れんの。
引数足りないのに。
つまり第三引数に入れろと。
無理矢理第二引数を埋めて入れろと。
(えー、、、、、、、、)
声にならない声
出来上がったものがこちらになります。
Undocumented information
罫線の発生条件は、
直前のpriorityとの差が11以上
11以上 。
ハイここテストに出すぞ。
priorityを1から始める場合、
[MenuItem ("SublimeSocket/connect", false, 1)]
static void Connect () {
}
[MenuItem ("SublimeSocket/connect", true)]
static bool IsConnectable () {
return false;
}
[MenuItem ("SublimeSocket/disconnect", false, 2)]
static void Close () {
}
[MenuItem ("SublimeSocket/disconnect", true)]
static bool IsClosable () {
return false;
}
// reload
[MenuItem ("SublimeSocket/reload", false, 13)]
static void Reload () {
}
[MenuItem ("SublimeSocket/reload", true)]
static bool IsReloadable () {
return false;
}
[MenuItem ("SublimeSocket/autoConnect-on", false, 24)]
static void TurnAutoOn () {
}
[MenuItem ("SublimeSocket/autoConnect-on", true)]
static bool IsTurnableAutoToOn () {
return true;
}
みたいになる。
たぶん、罫線出る == (10 < distance) とか書いちゃったんじゃねーかなー。
次回予告
チェック∨ を探す旅に出ます。
こういうのです。
正直、
むりっぽい気がしています。
からの、
nakamura001 @toru_inoue チェック付けるのはPrime31ですらこんな実装なので結構難易度高いんじゃないかと見てます http://t.co/qM1cWOSomL |
、、、、、、
、、、、
、、
よし!!
打ち切りました。
俺さんの次回作にご期待ください。